import relationalStore from '@ohos.data.relationalStore'; // 导入模块
import Tasks from "../model/tasks"

class TasksModel {
  private rdbStore:relationalStore.RdbStore
  private tableName:string="TASKS"      // 表的名称（后续操作需要用到）
  // 建库建表（在ability中触发初始化）
  initDB(context) {
    const STORE_CONFIG = {
      name: 'MyTask.db', // 数据库文件名
      securityLevel: relationalStore.SecurityLevel.S1 // 数据库安全级别
    };
    // 建表语句
    const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS TASKS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, CHECKED bit)'; // 建表Sql语句

    relationalStore.getRdbStore(context, STORE_CONFIG, (err, rdbStore) => {
      if (err) {
        console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);
        return;
      }
      console.info(`Succeeded in getting RdbStore.`);
      rdbStore.executeSql(SQL_CREATE_TABLE);  // 执行sql,创建数据表
      // 保存 rdbStore,后续可以操作增删改查
      this.rdbStore=rdbStore

    });
  }
  // 获取列表   根据谓词指定的查询条件查找数据。调用query()方法查找数据，返回一个ResultSet结果集。
  async getList(){
    // 构建查询条件
    let predicates = new relationalStore.RdbPredicates(this.tableName);
     let result = await this.rdbStore.query(predicates, ['ID', 'NAME', 'CHECKED'])
    // 解析查询结果
    let tasks:Tasks[]=[]
    // 遍历封装数据
    while (!result.isAtLastRow){
      result.goToNextRow()  // 指针移动下一行
      // 获取数据
      let id=result.getLong(result.getColumnIndex('ID'))
      let name=result.getString(result.getColumnIndex('NAME'))
      let checked=result.getLong(result.getColumnIndex('CHECKED'))
      // 封装到数组
      tasks.push({id, name, checked: !!checked})

    }
    console.log("查到数据",JSON.stringify(tasks))
    return tasks

  }
  // 新增
  add(name:string){
    return this.rdbStore.insert(this.tableName,{name,checked:false})
  }
  // 修改（通过匹配id来修改）
  update(id:number,checked:boolean){
    // 要更新的数据
    let data={checked}
    // 构建查询条件
    let predicates = new relationalStore.RdbPredicates(this.tableName); // 创建表的predicates
    predicates.equalTo('ID', id); // 匹配表'TASKS'中'ID'为'id'的字段
    //更新数据
    return this.rdbStore.update(data,predicates)
  }
  // 删除（根据id匹配删除）
  del(id:number){
    // 构建查询条件
    let predicates = new relationalStore.RdbPredicates(this.tableName); // 创建表的predicates
    predicates.equalTo('ID', id); // 匹配表'EMPLOYEE'中'NAME'为'Lisa'的字段
    //更新数据
    return this.rdbStore.delete(predicates)
  }
}

const taskModel = new TasksModel()

export default taskModel as TasksModel